﻿using System;
using Daco.Flags;

namespace Daco.Security
{
    /// <summary>
    /// Các quyền hạn
    /// </summary>
    public enum EPermission
    {
        /// <summary>
        /// Quyền xem
        /// </summary>
        SelectAccess = 1,
        /// <summary>
        /// Quyền thêm mới dữ liệu
        /// </summary>
        InsertAccesss = 2,
        /// <summary>
        /// Quyền cập nhật dữ liệu
        /// </summary>
        UpdateAccess = 4,
        /// <summary>
        /// Quyền xóa dữ liệu
        /// </summary>
        DeleteAccess = 8,
        /// <summary>
        /// Quyền xác nhận
        /// </summary>
        ApproveAccess = 16,
        /// <summary>
        /// Quyền thực hiện vote
        /// </summary>
        VoteAccess = 32,
        /// <summary>
        /// Quyền tạo Poll
        /// </summary>
        PollAccess = 64,
        /// <summary>
        /// Quyền đăng ký
        /// </summary>
        RegisterAccess = 128,
        /// <summary>
        /// Quyền đặt hàng
        /// </summary>
        OrderAccess = 256,
        /// <summary>
        /// Quyền đăng tải
        /// </summary>
        UploadAccess = 512
    }
    /// <summary>
    /// Lớp Permission
    /// </summary>
    public class CPermission : CFlag
    {
        public CPermission()
            : this(EPermission.SelectAccess)
        {
        }

        public CPermission(EPermission flag)
            : base((int)flag)
        {

        }

        public CPermission(int bitValue)
            : base(bitValue)
        {
        }

        public CPermission(object bitValue)
            : base((int)bitValue)
        {
        }

        public bool SelectAccess
        {
            get
            {
                return this[0];
            }
        }

        public bool InsertAccess
        {
            get
            {
                return this[1];
            }
        }

        public bool UpdateAccess
        {
            get
            {
                return this[2];
            }
        }

        public bool DeleteAccess
        {
            get
            {
                return this[3];
            }
        }

        public bool ApproveAccess
        {
            get
            {
                return this[4];
            }
        }

        public bool VoteAccess
        {
            get
            {
                return this[5];
            }
        }

        public bool PollAccess
        {
            get
            {
                return this[6];
            }
        }

        public bool RegisterAccess
        {
            get
            {
                return this[7];
            }
        }

        public bool OrderAccess
        {
            get
            {
                return this[8];
            }
        }

        public bool UploadAccess
        {
            get
            {
                return this[9];
            }
        }
    }
}
